package com.link.base.base.position.dao.mybatis.mapper;

import com.link.base.base.position.model.Position;
import com.link.base.base.system.model.TreeNode;
import com.link.base.ext.emp.model.ExtEmployee;
import com.link.core.basic.dao.mapper.BasicMapper;
import com.link.core.basic.model.CallParam;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author history update 18.11.05
 */
public interface PositionMapper extends BasicMapper<Position> {

    /**
     * 查询根职位
     *
     * @param entity
     * @return Position
     * @throws Exception
     */
    public Position queryRoot(Position entity) throws Exception;

    /**
     * 查询职位列表表排除主键为Id的职位和其子职位，只取有效的信息
     *
     * @param entity
     * @return List
     * @throws Exception
     */
    public List<Position> queryPositionListRemoveIdAndChildrenPage(Position entity) throws Exception;

    /**
     * 通过用户ID查询用户的职位
     * @param entity
     * @return List
     * @throws Exception
     */
    public List<Position> queryByUserPage(Position entity) throws Exception;

    /**
     * 获取子孙职位的id字符串
     * @param entity
     * @return String
     * @throws Exception
     */
    public String getPostnChildStr(Position entity) throws Exception;

    /**
     * 修改主要负责人
     * @param entity
     * @throws Exception
     */
    public void mainUserUpdate(Position entity) throws Exception;

    /**
     * 通过集成ID查询职位
     * @author huanglongjian
     * @param entity
     * @return Position
     * @throws Exception
     * @date 2017年11月30日
     */
    public Position queryByIntegrationId(Position entity) throws Exception;

    /**
     * 查询客户的职位
     * @author huanglongjian
     * @param postion
     * @return List
     * @throws Exception
     */
    public List<Position> queryByAccntId(Position postion) throws Exception;

    /**
     * 删除某账套下的所有职位
     * @param position
     * @throws Exception
     */
    public void deleteCorpPosition(Position position) throws Exception;

    /**
     * 查询000账套下的默认职位
     * @param position
     * @return Position
     * @throws Exception
     */
    public Position queryByCorpPostn(Position position) throws Exception;

    /**
     * 插入默认职位
     * @param record
     * @throws Exception
     */
    public void insertCorpPosition(CallParam record) throws Exception;

    /**
     * 查询当前账套下所有职位
     * @param position
     * @return List
     * @throws Exception
     */
    public List<Position> queryCorpPostnList(Position position) throws Exception;

    /**
     * 查询当前账套下的所有组织，queryCorpPostnList，该方法用户生成组织树
     *
     * @author LiYang
     * @date 2019/12/12
     * @param position
     */
    public List<TreeNode> queryAllPostnList(Position position) throws Exception;

    /**
     * 删出拉平表当前账套下的所有职位数据
     * @param position
     * @throws Exception
     */
    public void deleteCorpInnerPostn(Position position) throws Exception;

    /**
     * 往拉平表插入当前账套的职位拉平数据
     * @param postn
     * @throws Exception
     */
    public void insertPartyRelPostn(Position postn) throws Exception;

    /**
     * 批量往拉平表插入职位数据
     * @param positionList
     * @throws Exception
     */
    public void insertPartyRelPostnList(List<Position> positionList) throws Exception;

    /**
     * 根据SHR组织ID查询组织
     * @author 刘启鑫
     * @date 2020/8/21 17:52
     */
    Position queryUniquePositionByPosntCode(Position position);

    /**
     * 根据SHR父组织ID查询组织
     * @author 刘启鑫
     * @date 2020/8/21 17:52
     */
    Position queryUniqueShrParPosition(Position position);

    /**
     * 更新ESB接口数据
     * @author 刘启鑫
     * @date 2020/8/21 17:53
     */
    void updateForEsb(Position position);

    /**
     * 根据Shr职位ID查询职位信息
     *
     * @author 刘启鑫
     * @date 2020/8/22 17:54
     */
    Position queryEmpPositionByEmp(ExtEmployee employee);


    Position queryPositionByPostnCode(@Param("postnCode") String postnCode);


    /**
     * 查询商务中心的职位
     *
     * @author 王昊
     * @date 2020/09/25 17:54
     */
    List<Position> queryUserPostnById(Position t);
}
